﻿= СТАНДАРТ ПРОГРАММИРОВАНИЯ ДЛЯ ПРОЕКТА =

Здесь представлен наш стандарт на программирование, используемый в данном проекте.
Данный стандарт ничем не защищен, однако мы его используем как основной и он собран на нашем
собственном опыте и предпочтениях, для нас это упрощает понимание кода при его чтении.
Некоторые файлы все еще не соответствуют этим правилам, они будут обновлены в ближайшее время.
Также просим Вас придерживаться данного стандарта в пределах данного проекта, будем вам благодарны.



== ОБЩЕЕ ==

Не используйте табуляторы, используйте пробелы.

Длина строки не должна быть больше 100 символов.

Названия функциям, переменным и определениям необходимо давать такое,
чтобы было понятно их назначение.



== ПЕРЕМЕННЫЕ ==

Имя переменной должно начинаться с маленькой буквы,
а каждое последующее слово в имени переменной должно начинаться с заглавной буквы.
Пример:

  char  strVar[10];

но не

  char  StrVar[10];
  char  strvar[10];
  char  Strvar[10];
  char  str_var[10];
  ...

Всегда пишите одну переменную на одной строке.
Пример:

  char* strPointer;
  char  text[256];

но не

  char *strPointer, text[256];

В классах имя частной или защищенной переменной должно начинаться с "m_".
Пример:

  int   m_ownSize;
  char* m_internalStr; 

Имя глобальной переменной должно начинаться с "g_".
Пример:

  static bool  g_someGlobalFlag = TRUE;



== КЛАССЫ И ФУНКЦИИ ==

Каждое слово в названии глобальной функции или класса должно начинаться с заглавной буквы.
Пример:

  MyClass, SomeClass, MyGlobalFunc, SomeGlobalFunc, ...

но не

  myClass, _testClass, some_class, ...

Название методов и функций класса должно начинаться с прописной (маленькой) буквы,
а каждое последующее слово в название должно писаться с заглавной буквы так:
Пример:

  someClassFunc;

но не

  MyClassFunc, _testClassFunc, some_class_func, ...

В классах имя частной или защищенной переменно должно начинаться с "_".
Пример:

  _privateFunc();
  
Вызовы методов и функций класса, а также их описания должны писаться так:
Пример:

  SomeGlobalFunc( a );
  class.someClassFunc( a, b, c );

но не

  someClassFunc(a, b, c);
  someClassFunc ( a, b, c );
  someClassFunc (a, b, c);
  
Начальная скобка "{" в описании функции или класса должна быть на следующей строке.
Пример:

class SomeClass
{
   ...
}

SomeFunc ( int a )
{
   ...
}

но не

class SomeClass{
   ...
}

SomeFunc ( int a ){
   ...
}



== УСЛОВИЯ И ЦИКЛЫ ==

While, if и case условия должны быть записаны так:
Пример:

  while ( i != 0 )
  if ( i > 0 )

но не

  while(i != 0)
  while (i != 0)
  if(i > 0)
  if (i > 0)

Всегда используйте {} в if и while, даже если только одна строка в теле, 
а начальная скобка "{" всегда должна писаться на той же самой строке.
Пример:

  while ( p != 0 ){
    p = p->next;
  }
  if ( p > 0 ){
    p = 45;
  } else {
	...
  }

но не

  while ( p != 0 )
    p = p->next;
  
  if ( p > 0 )
    p = 45;



== ДОКУМЕНТИРОВАНИЕ И КОММЕНТАРИИ ==

Весь исходный код необходимо документировать согласно doxygen аннотации.

Для комментариев всегда используйте /* */ но не //.



== ОПРЕДЕЛЕНИЯ ==

Определения должны писаться всегда заглавными буквами с символом "_" между слов.
Пример:

#define OSC_STATUS_SUCCESS	0
#define OSC_POINTER_SIZE	4

однако определения для функций должны выглядеть как обычные функции.
Пример:

#define OscMilliSleep( msec )  Sleep( msec )



== CТРУКТУРЫ И ОБЪЕДИНЕНИЯ ==

В структурах и объединениях начальная скобка "{" всегда должна писаться на той же самой строке.
Пример:

  struct S {
     char c;
     int  size;
  };
  union U {
     double d;
     long long u;
  };
  